// 定义一个名为 SpringApplication 的构造函数，接收一个 ResourceLoader 对象和可变参数 primarySources
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
    // 设置是否添加命令行属性，这里设置为 true，表示添加
    this.addCommandLineProperties = true;
    // 设置是否添加转换服务，这里设置为 true，表示添加
    this.addConversionService = true;
    // 设置应用程序是否以无头模式运行，这里设置为 true，表示以无头模式运行
    this.headless = true;
    // 初始化额外的配置文件集合，这里初始化为空集合
    this.additionalProfiles = Collections.emptySet();
    // 设置应用程序上下文工厂，使用默认的工厂
    this.applicationContextFactory = ApplicationContextFactory.DEFAULT;
    // 设置应用程序启动器，使用默认的启动器
    this.applicationStartup = ApplicationStartup.DEFAULT;
    // 初始化应用程序属性对象
    this.properties = new ApplicationProperties();
    // 将传入的 ResourceLoader 对象赋值给当前实例的 resourceLoader 属性
    this.resourceLoader = resourceLoader;
    // 断言 primarySources 不为 null，如果为 null 则抛出异常
    Assert.notNull(primarySources, "'primarySources' must not be null");
    // 将传入的 primarySources 数组转换为 LinkedHashSet 并赋值给当前实例的 primarySources 属性
    this.primarySources = new LinkedHashSet(Arrays.asList(primarySources));
    // 根据类路径推断 Web 应用程序的类型，并设置到应用程序属性中
    this.properties.setWebApplicationType(WebApplicationType.deduceFromClasspath());
    // 从 Spring 工厂实例中获取 BootstrapRegistryInitializer 实例，并将其添加到 bootstrapRegistryInitializers 列表中
    this.bootstrapRegistryInitializers = new ArrayList(this.getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
    // 从 Spring 工厂实例中获取 ApplicationContextInitializer 实例，并设置到当前实例的 initializers 中
    this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
    // 从 Spring 工厂实例中获取 ApplicationListener 实例，并设置到当前实例的 listeners 中
    this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
    // 推断主应用程序类，并将其赋值给当前实例的 mainApplicationClass 属性
    this.mainApplicationClass = this.deduceMainApplicationClass();
}